package com.jeeplus.mob.payUtile;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;

public class XMLUtil
{
  public static Map doXMLParse(String strxml)
    throws IOException, JDOMException
  {
    strxml = strxml.replaceFirst("encoding=\".*\"", "encoding=\"UTF-8\"");
    if ((strxml == null) || ("".equals(strxml))) {
      return null;
    }
    Map m = new HashMap();
    
    InputStream in = new ByteArrayInputStream(strxml.getBytes("UTF-8"));
    SAXBuilder builder = new SAXBuilder();
    Document doc = builder.build(in);
    Element root = doc.getRootElement();
    List list = root.getChildren();
    Iterator it = list.iterator();
    while (it.hasNext())
    {
      Element e = (Element)it.next();
      String k = e.getName();
      String v = "";
      List children = e.getChildren();
      if (children.isEmpty()) {
        v = e.getTextNormalize();
      } else {
        v = getChildrenText(children);
      }
      m.put(k, v);
    }
    in.close();
    
    return m;
  }
  
  public static String getChildrenText(List children)
  {
    StringBuffer sb = new StringBuffer();
    if (!children.isEmpty())
    {
      Iterator it = children.iterator();
      while (it.hasNext())
      {
        Element e = (Element)it.next();
        String name = e.getName();
        String value = e.getTextNormalize();
        List list = e.getChildren();
        sb.append("<" + name + ">");
        if (!list.isEmpty()) {
          sb.append(getChildrenText(list));
        }
        sb.append(value);
        sb.append("</" + name + ">");
      }
    }
    return sb.toString();
  }
  
  public static String getXMLEncoding(String strxml)
    throws JDOMException, IOException
  {
    InputStream in = HttpClientUtil.String2Inputstream(strxml);
    SAXBuilder builder = new SAXBuilder();
    Document doc = builder.build(in);
    in.close();
    return (String)doc.getProperty("encoding");
  }
  
  public static String setXML(String return_code, String return_msg)
  {
    return "<xml><return_code><![CDATA[" + return_code + "]]></return_code><return_msg><![CDATA[" + return_msg + "]]></return_msg></xml>";
  }
  
  public static String createXML(Map<String, Object> map)
  {
    Set<Entry<String, Object>> set = map.entrySet();
    set.iterator();
    return null;
  }
}
